package be.ipl.finito.servlets;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import be.ipl.finito.domaine.Joueur;
import be.ipl.finito.usecases.GestionJoueur;

@WebServlet(name = "servletLogin.html")
public class Login extends HttpServlet {
	@EJB
	private GestionJoueur gestionJoueur;
	
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		response.sendRedirect("index.html");
	}
	
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		
		final ServletContext context = getServletContext();
		HttpSession httpSession = request.getSession();
		
		// Verification des paramettres
		String login = request.getParameter("login");
		String motDePasse = request.getParameter("motDePasse");
		
		
		if (login == null || motDePasse == null || login.isEmpty()) {
			response.sendRedirect("index.html?messageError=Veuillez entrer un login et un mot de passe, svp.");
			return;
		}

		// Paramettres fournis -> Authentification
		Joueur joueur = gestionJoueur.authentification(login, motDePasse);
		
		if(joueur != null) {
			// Authentification reussie
			
			synchronized (httpSession) {
				httpSession.setAttribute("joueur", joueur);
			}
			
			synchronized (context) {
				List<Joueur> listJoueursConnectes = (List<Joueur>) context.getAttribute("joueursConnectes");
				
				if(listJoueursConnectes == null) {
					listJoueursConnectes = new ArrayList<Joueur>();
					listJoueursConnectes.add(joueur);
				} else {
					listJoueursConnectes.add(joueur);
				}
				
				context.setAttribute("joueursConnectes", listJoueursConnectes);
			}
			
			this.getServletContext().getNamedDispatcher("menu.html")
					.forward(request, response);
			
			return;
		} else {
			// Authentification ratee
			response.sendRedirect("index.html?messageError=Le login et/ou mot de passe sont incorrect.");
			return;
		}
	}
}
